<?php
/**
 * Este Widget muestra un formulario de login
 * 
 * @package Users
 * @author j.m.j.s. (24/07/2009)
 */
class Login extends CWidget
{	
	public $logIn;
	
	/**
	 * Importa los elementos necesarios para el funcionamiento del widget
	 * 
	 * @author j.m.j.s. (24/07/2009)
	 */
	public function init()
	{
		Yii::import('application.modules.users.models.*');
		Yii::import('application.modules.users.components.*');
		Yii::import('application.modules.users.helpers.RijndaelHex');
	}
	
	/**
	 * Muestra el formulario de login
	 * 
	 * @author j.m.j.s. (24/07/2009)
	 * @author j.m.j.s. (19/01/2010)
	 */
	public function run()
	{
  		// Se inicializa el contador de intentos de login
  		if(!isset($_SESSION['login']['attempts']))
  			$_SESSION['login']['attempts'] = 0;
		// Si la cantidad de intentos de login supera la cantidad permitida antes de bloquear la cuenta
		if($_SESSION['login']['attempts'] >= Yii::app()->params['attemptsBeforeLockUser'])
		{
			Yii::app()->user->setFlash('success',"Su cuenta de usuario fue inhabilitada por motivos de seguridad. Por favor contacte con el administrador del sistema para mas información.");
			$this->render('login',array('lockUser'=>true));
		}
		else
		{// Si todo está bien...
	  		$model=new UsersLoginForm;
	  		// collect user input data
			if(isset($_POST['UsersLoginForm']))
			{
				$model->attributes=$_POST['UsersLoginForm'];
					
		  		$model->scenario='formWithOutCapcha';//Por defecto se asume que no se muestra la imagen de seguridad capcha
		  		//Si la cantidad de intentos de login supera el limite entonces se valida el capcha
				if($_SESSION['login']['attempts'] >= Yii::app()->params['attemptsBeforeCapcha'])
					$model->scenario='formWithCapcha';
				
				$model->rijndaelKey = Yii::app()->params['rijndaelKey'];
				$model->cookieKey = Yii::app()->params['cookieKey'];
				
				// Valida los datos del usuario y redirecciona a la url indicada en la definicion del modulo
				if($model->validate())
				{
					unset($_SESSION['login']['attempts']);
					$this->controller->redirect($this->logIn);
				}
				else
				{
					$_SESSION['login']['attempts']++;
					// Si la cantidad de intentos de login superó la cantidad de intentos permitidos, 
					// entonces se bloquea la cuenta del usuario ingresado si existe.
					if($_SESSION['login']['attempts'] == Yii::app()->params['attemptsBeforeLockUser'])
					{
						if($model = User::model()->findByAttributes(array('usr_nickname'=>$model->username)))
						{
							$model->usr_date_block = date('Y-m-d H:i:s');
							$model->usr_status = 0;
							$model->save();
							
							Yii::import('application.helpers.PHPMailer');
							$mail = new PHPMailer();
							$mail->IsHTML(true);
							$mail->Host = Yii::app()->controller->module->params['serverEmail'];
							$mail->From = Yii::app()->controller->module->params['supportEmail'];
							$mail->FromName = "Admin";
							$mail->Subject = utf8_decode('Activación de cuenta de usuario');	
							
					        $rijndael = new RijndaelHex(Yii::app()->params['rijndaelKey']);
					        // Se encripta la fecha de bloqueo y se agrega a la url de activación    
					        $cryptDate = $rijndael->linencrypthex($model->usr_date_block);
							$url = "http://{$_SERVER['HTTP_HOST']}/index.php?r=users/login/activate&c={$cryptDate}";
					        
					        $mail->Body = "Para activar de nuevo la cuenta de usuario debe hacer clic <a href='{$url}'>aquí</a>
										   o pegar en el navegador la siguiente url: {$url}";	
							
							$mail->AddAddress($model->usr_email);	
							$mail->Send();	
						}
						
					}
				}
			}
			else
			{
		  		$cookieNameUser = Yii::app()->params['cookieKey']."-qfdr4uc";
				//Si la cookie existe entonces se desencriptan los datos de usuario y contraseña y se muestran en el formulario.
				if(isset($_COOKIE[$cookieNameUser]))
				{
					$cookieNamePass = Yii::app()->params['cookieKey']."-qpdr3w";
					$rijndael = new RijndaelHex(Yii::app()->params['rijndaelKey']);
					$model->username = $rijndael->lindecrypthexComplex($_COOKIE[$cookieNameUser]);
			        $model->password = $rijndael->lindecrypthexComplex($_COOKIE[$cookieNamePass]);
			        $model->rememberMe = true;
				}
			}
			//Si la cantidad de intentos de login supera el limite entonces se muestra el capcha
			if($_SESSION['login']['attempts'] >= Yii::app()->params['attemptsBeforeCapcha'])
				$allowEmpty = false;
			else
				$allowEmpty = true;
			
			$this->render('login',array('model'=>$model, 'allowEmpty'=>$allowEmpty, 'lockUser'=>false));
		}
	}
}